/**
 * 
 */
package co.com.smart.eagle.client.activity;

import java.util.List;

import co.com.smart.eagle.client.EagleCallBack;
import co.com.smart.eagle.client.factory.EagleFactory;
import co.com.smart.eagle.client.rpcservices.login.LoginService;
import co.com.smart.eagle.client.rpcservices.login.LoginServiceAsync;
import co.com.smart.eagle.client.view.CrearUsuariosView;
import co.com.smart.eagle.client.view.CrearUsuariosView.Presenter;
import co.com.smart.eagle.client.view.impl.CrearUsuariosViewImpl.FocusUserPlace;
import co.com.smart.eagle.client.view.impl.components.SmartAlertDialog.CallBackModal;
import co.com.smart.eagle.client.view.util.SmartLoading;
import co.com.smart.eagle.client.view.util.SmartMensajes;
import co.com.smart.eagle.infrastructure.dto.RolesDTO;
import co.com.smart.eagle.infrastructure.dto.SmartTipoMensajes;
import co.com.smart.eagle.infrastructure.dto.UsuariosDTO;

import com.google.gwt.activity.shared.AbstractActivity;
import com.google.gwt.core.shared.GWT;
import com.google.gwt.event.shared.EventBus;
import com.google.gwt.user.client.ui.AcceptsOneWidget;

/**
 * @author Andres Felipe Escobar Lopez
 *
 */
public class CrearUsuariosActivity extends AbstractActivity implements
		Presenter {

	private CrearUsuariosView view;
	private LoginServiceAsync service = GWT.create(LoginService.class);

	public CrearUsuariosActivity(EagleFactory eagleFactory) {
		view = eagleFactory.getCrearUsuariosView();
		view.setPresenter(this);
		view.cleanForm();
		getUsers();
	}

	@Override
	public void start(AcceptsOneWidget panel, EventBus eventBus) {
		panel.setWidget(view);
	}

	@Override
	public void crearUsuario() {
		EagleCallBack<Void> callBack = new EagleCallBack<Void>(true) {
			@Override
			public void success(Void result) {
				SmartMensajes.getInstance().show("Informaci\u00F3n",
						"Usuario almacenado correctamente",
						SmartTipoMensajes.INFORMACION, new CallBackModal() {

							@Override
							public void finModal() {
								view.cleanForm();
								getUsers();
								view.setFocus(FocusUserPlace.USER);
							}
						});
			}
		};
		SmartLoading.getInstance().show();
		UsuariosDTO user = new UsuariosDTO();

		user.setDsUser(view.getUserName());
		user.setDsClave(view.getPassWord());
		user.setRoles(view.getRolesPorUsuario());

		if (!view.isEnabledUser()) {
			user.setEdited(true);
		}
		service.setUsuario(user, callBack);
	}

	@Override
	public boolean validateCreateUser() {

		if ("".equals(view.getUserName())) {
			SmartMensajes.getInstance().show("Validaci\u00F3n",
					"Ingrese el usuario", SmartTipoMensajes.ADVERTENCIA,
					new CallBackModal() {

						@Override
						public void finModal() {
							view.setFocus(FocusUserPlace.USER);
						}
					});
			return Boolean.FALSE;
		}

		if ("".equals(view.getPassWord())) {
			SmartMensajes.getInstance().show("Validaci\u00F3n",
					"Ingrese la clave", SmartTipoMensajes.ADVERTENCIA,
					new CallBackModal() {

						@Override
						public void finModal() {
							view.setFocus(FocusUserPlace.PASS);
						}
					});
			return Boolean.FALSE;
		}

		if ("".equals(view.getPassWordConfirm())) {
			SmartMensajes.getInstance().show("Validaci\u00F3n",
					"Confirme la clave", SmartTipoMensajes.ADVERTENCIA,
					new CallBackModal() {

						@Override
						public void finModal() {
							view.setFocus(FocusUserPlace.CONFIRM_PASS);
						}
					});
			return Boolean.FALSE;
		}

		if (!view.getPassWordConfirm().equals(view.getPassWord())) {
			SmartMensajes.getInstance().show("Validaci\u00F3n",
					"Las claves no son iguales", SmartTipoMensajes.ADVERTENCIA,
					new CallBackModal() {

						@Override
						public void finModal() {
							view.setPassWordConfirm("");
							view.setFocus(FocusUserPlace.CONFIRM_PASS);
						}
					});

			return Boolean.FALSE;
		}

		return Boolean.TRUE;
	}

	@Override
	public void getUsers() {

		EagleCallBack<List<UsuariosDTO>> callBack = new EagleCallBack<List<UsuariosDTO>>(
				true) {
			@Override
			public void success(List<UsuariosDTO> result) {
				view.setUsers(result);
				cargarRoles();
			}
		};
		SmartLoading.getInstance().show();
		service.getUsuario(callBack);
	}

	@Override
	public void cargarRoles() {
		EagleCallBack<List<RolesDTO>> callBack = new EagleCallBack<List<RolesDTO>>(
				true) {
			@Override
			public void success(List<RolesDTO> result) {
				view.setRoles(result);
			}
		};
		SmartLoading.getInstance().show();
		service.getRoles(callBack);
	}

	@Override
	public void editUser(UsuariosDTO user) {
		view.setEnableTxtUser(false);
		view.setTextBtnGrabar("Actualizar");
		view.setUserName(user.getDsUser());
		view.setRolesPorUsuario(user.getRoles());
		view.setFocus(FocusUserPlace.PASS);
	}

	@Override
	public void deleteUser(UsuariosDTO user) {
		EagleCallBack<Void> callBack = new EagleCallBack<Void>(true) {
			@Override
			public void success(Void result) {
				SmartMensajes.getInstance().show("Informaci\u00F3n",
						"Usuario eliminado correctamente",
						SmartTipoMensajes.INFORMACION, new CallBackModal() {

							@Override
							public void finModal() {
								view.cleanForm();
								getUsers();
							}
						});
			}
		};
		SmartLoading.getInstance().show();
		service.borrarUsuario(user, callBack);
	}

}
